package main
import "fmt"

// 全局变量允许声明但不实用的。
var xyz int
var x1, x2 int
// 这种因式分解关键字的写法一般用于声明全局变量
var (
    x3 int
    x4 bool
)

var x5, x6 int = 1, 2
var x7, x8 = 123, "hellow"

func main() {
    fmt.Println("Hello World!")

    // 生命一个变量的一种形式是使用var关键字
    var a string = "Runoob"
    fmt.Println(a)

    // 可以一次生命多个变量
    var b, c int = 1, 2
    fmt.Println(b, c)
    
    // 声明一个变量并初始化
    var aa = "RUNNOOB"
    fmt.Println(aa)

    // 没有初始化就为零值
    var bb int
    fmt.Println(bb)

    // bool 零值为false
    var cc bool
    fmt.Println(cc)

    // 数值类型零值为0，布尔类型零值为false，字符串为""，
    var a1 int
    var b1 float64
    var c1 bool
    var d1 string
    fmt.Printf("%v %v %v %q\n", a1, b1, c1, d1)
    
    // 根据值自行判定变量类型
    var d = true
    fmt.Println(d)

    // 如果变量已经使用var声明了，再使用:=声明变量，就产生编译错误
    // var d1 int
    // d1 := 1 // 这时候会产生编译错误，因为 intVal 已经声明，不需要重新声明

    f := "Runoob"
    fmt.Println(f)
    
    x9, x10 := 123, "hello"
    fmt.Println(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)
    
    // 如果声明了一个变量却没有在相同的代码块中使用，会报编译错误。
    // var abc int
}
